混合编程之 Matlab 调用 Fortran | 您所在的位置:网站首页 › simply fortran怎么运行程序 › 混合编程之 Matlab 调用 Fortran |
因为学习的需要,于是上网学习Fortran与Matlab之间的混编,起初模仿网上现成的代码,但总有碰壁,被各种小问题烦恼不堪,后慢慢摸索调试,总算能成功运行,写下此博文一为记录自己的心得,以备后用;二为网上被同样问题困扰之士提供可能的帮助。 一. 测试平台Window 10 64位系统 Matlab 2017a 64位 Simply Fortran v2.4 二. Matlab 调用 Fortran 之 DLL实现1、生成DLL文件 步骤1:在Simply Fortran v2.4上,新建一个Shared Library(DLL)项目,项目名随意。 步骤2:由于在64位的Matlab上调用DLL,因此我们须将项目的DLL文件也生成为64位,否则Matlab将会提示错误 “不是有效的Win32应用程序” 。注意Target Name的dll文件名须符合为Matlab变量命名法则。 步骤4:生成DLL 直接Build project,即可生成test_f.dll文件 2、书写C语言的头文件 C语言的头文件仅包含一句代码:void test(double*,double*,double*); 该代码名须与子例行程序名相同,该头文件可在任何文件编辑器中编写,编写完后保存头文件,本例中头文件名为:test_c.h。其实,每一个dll文件可包含多个子例行程序,那么在书写头文件代码时,就需要对应书写多个void代码。 3、编辑m文件 先附示例代码: a=1;b=2;c=0; a=double(a);b=double(b);c=double(c); loadlibrary('test_f.dll','test_c.h'); w=calllib('test_f','test',c,a,b); unloadlibrary test_f代码第一行,a,b为输入参数,c为输出参数,但须赋初值,如0; 代码第二行,将各参数转为类型相同的double类型参数; 代码第三行,加载动态链接库,前一个为动态链接库文件名,后一个为头文件名,两者均须加后缀; 代码第四行,调用动态链接库,前一个为动态链接库文件名,无后缀,后一个为想调用的子例行程序名; 代码第五行,释放动态链接库,为无后缀的动态链接库文件名。 由此,Matlab 调用 Fortran 之 DLL成功实现。 可以预知,该例所求值:w=3; 若上述第四行代码改为: [w,m]=calllib('test_f','test',c,a,b);则输出的是:w=3;m=1;对应的是c和a的值。由此可见Matlab是按左到右的方式获取数值的,因此,参数的排列用户需要格外重视。 |
CopyRight 2018-2019 实验室设备网 版权所有 |